import type { DictionaryDto, EnumDto, PageDto, PageReqDto, PagesDto } from '@/api/types'
import type { CompanyAuditStatusEnum, DailyGroupInsureCompanyType, DailyProductTypeCnEnum, ProductTypeCnEnum, ProductTypeEnum } from '@/const/enum'
import request from '@/utils/request'
import type { DailyPlanDto, WesureAuditDto, WesureRecordDto } from './types'

// 获取日日保投保审核列表的函数
// 接受一个参数 params，它是一个对象，包含以下属性：
// - companyId：数字类型，代表公司 ID
// - insureCompanyType：字符串类型，值为 'insure002_gsc'，表示保险公司类型
// - auditStatus：可选属性，其值可以是 CompanyAuditStatusEnum 枚举中的 APPROVED、REJECTED 或 PENDDING 之一，代表审核状态
// - serveCompanyName：可选属性，字符串类型，可能是服务公司名称
// - productType：数字类型，0 日日保  1 团意日保
// 函数返回一个 Promise，解析为 PageDto<WesureAuditDto> 类型的数据
export function getWesureAuditList(params: PageReqDto & {
    companyId: number
    insureCompanyType: DailyGroupInsureCompanyType
    auditStatus?: CompanyAuditStatusEnum.APPROVED | CompanyAuditStatusEnum.REJECTED | CompanyAuditStatusEnum.PENDDING
    serveCompanyName?: string
    productType: DailyProductTypeCnEnum // 0 | 1  // 0 日日保  1 团意日保 这边的产品类型和其他的不一样
}): Promise<PageDto<WesureAuditDto>>{
    // 发送 GET 请求到 /api/admin/company/list-audit 并传递 params 作为请求参数
    return request.get('/crm-prod/admin/company/list-audit', {
        params
    })
}

// 获取日日保投保记录列表
export function getWesureRecordList(params: PageReqDto & {
    companyId: number
    insureCompanyType: DailyGroupInsureCompanyType, //'insure002_gsc' | 'insure_type_tyrb' // insure002_gsc 日日保  insure_type_tyrb 团意日保
    beginInsureDay: string
    endInsureDay: string
}): Promise<PageDto<WesureRecordDto>>{
    return request.get('/crm-prod/wesure/wesure-insure-record/insure-group', {
        params
    })
}

/**
 * 导出微保证记录
 * 
 * 本函数通过GET请求从API导出微保证记录，支持两种查询方式：
 * 1. 通过projectId单独查询
 * 2. 通过insureCompanyType、companyId以及可选的日期范围（beginInsureDay和endInsureDay）查询
 * 
 * @param params 查询参数对象，可以是以下两种形式之一：
 * - 包含projectId属性的对象，用于按项目ID查询
 * - 同时包含insureCompanyType和companyId属性的对象，用于按保险公司类型和公司ID查询，
 *   此外还可以包含beginInsureDay和endInsureDay属性来指定查询的日期范围
 * @returns 返回一个Promise，解析为导出记录的字符串
 */
export function exportWesureRecord(params: {
    projectId: number
} | {
    insureCompanyType: DailyGroupInsureCompanyType, //'insure002_gsc' | 'insure_type_tyrb' //  insure002_gsc 日日保  insure_type_tyrb 团意日保
    companyId: number
    beginInsureDay?: string
    endInsureDay?: string
}): Promise<string>{
    return request.get('/crm-prod/wesure/wesure-insure-record/export', {
        params
    })
}

// 日日保保单详情
export function getWesureRecordDetail(params: PageReqDto & {
    projectId: number
}): Promise<PageDto<WesureRecordDto>>{
    return request.get('/crm-prod/wesure/wesure-insure-record/insure-list', {
        params
    })
}

// 日日保保险公司列表
export function getDaliyInsuranceCompanyList(): Promise<DictionaryDto[]>{
    return request.get('/crm-prod/insur/insurComInsuranceCompany/query-daily-insurance-company')
}

// 获取投保方案列表
export function getDaliyInsuranceSolutionList(params: {
    insureCompany: string
}): Promise<(DictionaryDto & EnumDto)[]>{
    return request.get('/crm-prod/insur/insurComInsuranceCompany/query-daily-company-solution', {
        params
    })
}

// 获取日日保保险方案列表
export function getDailyInsurancePlanList(params: PageReqDto & {
    companyId: number
}): Promise<PageDto<DailyPlanDto>>{
    return request.get('/crm-prod/insur/InsurComCompanyPlans/daily/list', {
        params
    })
}


export function editWesurePrice(data: {
    id: number
    price: number
}): Promise<PageDto<DailyPlanDto>>{
    return request.put('/crm-prod/insur/InsurComCompanyPlans/daily', data)
}

